Force case-sensitivity on the LIKE operator, to ensure similar behaviour
authorbtongminh <bryan.tongminh@gmail.com>
Mon, 24 Dec 2012 20:10:22 +0000 (21:10 +0100)
committerbtongminh <bryan.tongminh@gmail.com>
Mon, 24 Dec 2012 20:10:22 +0000 (21:10 +0100)
between MySQL and SQLite

Change-Id: Idf2d90fe3df07364657abb6070f6eac59add1306

includes/db/DatabaseSqlite.php
tests/phpunit/includes/db/DatabaseSqliteTest.php

index d30d984..7e95fd3 100644 (file)
@@ -127,6 +127,8 @@ class DatabaseSqlite extends DatabaseBase {
                # set error codes only, don't raise exceptions
                if ( $this->mOpened ) {
                        $this->mConn->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_SILENT );
+                       # Enforce LIKE to be case sensitive, just like MySQL\r
+                       $this->query( 'PRAGMA case_sensitive_like = 1' );
                        return true;
                }
        }
index 7958a8a..466aa79 100644 (file)
@@ -372,4 +372,12 @@ class DatabaseSqliteTest extends MediaWikiTestCase {
                ksort( $indexes );
                return $indexes;
        }
+
+       function testCaseInsensitiveLike() {
+               // TODO: Test this for all databases
+               $db = new DatabaseSqliteStandalone( ':memory:' );\r
+               $res = $db->query( 'SELECT "a" LIKE "A" AS a' );\r
+               $row = $res->fetchRow();\r
+               $this->assertFalse( (bool)$row['a'] );\r
+       }
 }